# coding=utf-8

import cv2
from managers import WindowManager, CaptureManager
import filters


class Cameo(object):
    def __init__(self):
        self._windowManager = WindowManager('Cameo', self.onKeypress)
        self._captureManager = CaptureManager(cv2.VideoCapture(0), self._windowManager, True)
        self._curveFilter = filters.sharpen_filter();

    def run(self):
        """ Run the main loop."""
        self._windowManager.createWindow()
        while self._windowManager.isWindowCreated:
            self._captureManager.enterFrame()
            frame = self._captureManager._frame
            # TOTO: Filter the frame ( Capter 3 ).

            filters.strokeEdges( frame, frame )
            self._curveFilter.apply(frame, frame)

            self._captureManager.exitFrame()
            self._windowManager.processEvent();

    def onKeypress(self, keycode):
        """Handle a keypress.
        space   -> Take a screenshot.
        tab     -> Start/stop recoding a screencast.
        escape  - Quit.
        """
        if keycode == 32:  # space
            self._captureManager.writeImage('screenshot.png')
        elif keycode == 9:  # tab
            if not self._captureManager.isWritingVideo:
                self._captureManager.startWritingVideo('screencast.avi')
            else:
                self._captureManager.stopWritingVideo()
        elif keycode == 27:  # escape
            self._windowManager.destroyWindow()


if __name__ == "__main__":
    Cameo().run()
